package com.wander.designBehavioral.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author : WDYin
 * @Date : 2020/12/9
 * @Desc : Subject主题 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法
 */
public class Subject {

    /**所有观察者*/
    private List<Observer> observers = new ArrayList<>();

    /**观察者监听的主题状态*/
    private int state;

    public int getState() {
        return state;
    }

    /**
     * 设置状态并通知观察者
     * @param state
     */
    public void setState(int state) {
        this.state = state;
        notifyObserver();
    }

    /**
     * 添加观察者
     * @param observer
     */
    public void addObserver(Observer observer){
        observers.add(observer);
    }

    /**
     * 通知观察者
     */
    public void notifyObserver(){
        observers.forEach(Observer::update);
    }
}
